

#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"


class OneLoop {
public:
    std::vector<int> final;
    int cnt=0;


    bool ok_dfs(int n,int depth){

        if(n==0){
            return true;
        }
        if(n<0){
            return false;
        }
        if(depth==cnt){
            return false;
        }
        for(int i=0;i<final.size();i++){
            if(ok_dfs(n-final[i],depth+1)){
                return true;
            }
        }
        return false;
    }

    //可以由final数构成
    bool ok(int n){
        return ok_dfs(n,0);
    }

    int get_range(){
        int i=2;
        while(1){
            if(!ok(i)){
                break;
            }
            i++;
        }
        return i-1;
    }
    bool end=false;
    int range=0;
    void dfs(int index,int depth){
//        if(end){
//            return;
//        }
        if(depth==final.size()){
            int r=get_range();
            if(r>=range){
//                if(range>100){
//                    printf("");
//                }
                range=r;
            }else{
//                end= true;
            }
            return;
        }
        for(int i=index+1;i<=50;i++){
            final[depth]=i;
            dfs(i,depth+1);
        }
    }
    //a数量 b种数
    bool run(int a,int b
    ) {
        this->cnt=a;
        final.resize(b);
        final[0]=1;
        dfs(1,1);
        printf("%d\n",range);
        return true;
    }
};

class Solution {
public:
    void run() {

        bool first = true;
        int a, b, c, d, e;
        //        std::cin >> a;

        while (std::cin>>a>>b) {
            OneLoop l;
            if (!l.run(a,b)) {
                //                return;
            }
        }


    }
};

int main() {
    //    bool cur_num= true;
    Solution().run();
    return 0;
}

